import { DataTypes } from 'sequelize';
import sequelize from '../config/database.js';

const Transaction = sequelize.define('Transaction', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  
  // 交易类型：收入(income) 或 支出(expense)
  type: {
    type: DataTypes.ENUM('income', 'expense'),
    allowNull: false,
    validate: {
      notEmpty: {
        msg: '交易类型不能为空'
      }
    }
  },
  
  // 金额
  amount: {
    type: DataTypes.DECIMAL(10, 2),
    allowNull: false,
    validate: {
      min: {
        args: [0.01],
        msg: '金额必须大于0'
      },
      notNull: {
        msg: '金额不能为空'
      }
    }
  },
  
  // 分类ID
  categoryId: {
    type: DataTypes.INTEGER,
    allowNull: false,
    validate: {
      notNull: {
        msg: '分类不能为空'
      }
    }
  },
  
  // 描述/备注
  description: {
    type: DataTypes.STRING(200),
    allowNull: true,
    validate: {
      len: {
        args: [0, 200],
        msg: '描述不能超过200字符'
      }
    }
  },
  
  // 交易日期
  date: {
    type: DataTypes.DATE,
    allowNull: false,
    defaultValue: DataTypes.NOW,
    validate: {
      notNull: {
        msg: '交易日期不能为空'
      }
    }
  },
  
  // 账户类型
  account: {
    type: DataTypes.ENUM('cash', 'bank_card', 'alipay', 'wechat', 'credit_card', 'other'),
    defaultValue: 'cash',
    allowNull: false
  },
  
  // 是否为重复交易
  isRecurring: {
    type: DataTypes.BOOLEAN,
    defaultValue: false
  },
  
  // 重复频率
  recurringType: {
    type: DataTypes.ENUM('daily', 'weekly', 'monthly', 'yearly'),
    allowNull: true
  },
  
  // 标签（JSON格式存储）
  tags: {
    type: DataTypes.JSON,
    defaultValue: []
  }
}, {
  tableName: 'transactions',
  timestamps: true,
  indexes: [
    {
      fields: ['date']
    },
    {
      fields: ['type', 'date']
    },
    {
      fields: ['categoryId', 'date']
    }
  ]
});

export default Transaction;